package co.edu.eam.supergiros.persistencia.entidades;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

/**
 * Entidad que representa un giro.
 *
 * @author Camilo Andres
 *
 */
@NamedQueries({
    @NamedQuery(name = Giro.CONSULTA_LISTAR_GIROS_USUARIO_ORIGEN, query = "SELECT gir FROM Giro gir WHERE gir.usuarioOrigen.cedula=:" + Giro.PARAMETRO_CEDULA_USUARIO_ORIGEN),
    @NamedQuery(name = Giro.CONSULTA_LISTAR_GIROS_USUARIO_DESTINO, query = "SELECT gir FROM Giro gir WHERE gir.usuarioOrigen=:" + Giro.PARAMETRO_CEDULA_USUARIO_DESTINO),
    @NamedQuery(name = Giro.CONSULTA_LISTAR_GIROS_FECHA, query = "SELECT gir FROM Giro gir WHERE gir.fechaEnvio between :"+Giro.PARAMETRO_FECHA_UNO+" and :"+Giro.PARAMETRO_FECHA_DOS),
})
@Entity
@Table(name = "Giro")
public class Giro implements Serializable {

    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static final String CONSULTA_LISTAR_GIROS_USUARIO_ORIGEN = "Giro.ListarGirosUsuarioOrigen";
    public static final String PARAMETRO_CEDULA_USUARIO_ORIGEN = "cedulaUsuarioOrigen";
    public static final String CONSULTA_LISTAR_GIROS_USUARIO_DESTINO = "Giro.ListarGirosUsuarioDestino";
    public static final String PARAMETRO_CEDULA_USUARIO_DESTINO = "cedulaUsuarioDestino";
    public static final String CONSULTA_LISTAR_GIROS_FECHA = "Giro.ListarGirosFecha";
    public static final String PARAMETRO_FECHA_UNO="fechaUno";
    public static final String PARAMETRO_FECHA_DOS="fechaDos";
    /**
     * Identifiador del giro. posee la siguiente estructura:
     * yyyyMMddhhmmss+aleatorio5digitos
     */
    @Id
    @Column(name = "giro")
    private String giro;
    /**
     * Ciudad desde donde se envia el giro
     */
    @ManyToOne
    @JoinColumn(name = "ciudadOrigen")
    private Ciudad ciudadOrigen;
    /**
     * Ciudad a la que se envia el giro.
     */
    @ManyToOne
    @JoinColumn(name = "ciudadDestino")
    private Ciudad ciudadDestino;
    /**
     * Usuario que envia el giro.
     */
    @ManyToOne
    @JoinColumn(name = "usuarioOrigen")
    private Usuario usuarioOrigen;
    /**
     * usuario al que va dirigido el giro.
     */
    @ManyToOne
    @JoinColumn(name = "usuarioDestino")
    private Usuario usuarioDestino;
    /**
     * Moneda usada al enviar el giro.
     */
    @ManyToOne
    @JoinColumn(name = "moneda")
    private Moneda moneda;
    /**
     * Cantidad de dinero enviado.
     */
    @Column(name = "cantidad")
    private double cantidad;
    /**
     * fecha en la que se envia el giro
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "fechaEnvio")
    private Date fechaEnvio;

    public Giro() {
    }

    public double getCantidad() {
        return cantidad;
    }

    public void setCantidad(double cantidad) {
        this.cantidad = cantidad;
    }

    public Ciudad getCiudadDestino() {
        return ciudadDestino;
    }

    public void setCiudadDestino(Ciudad ciudadDestino) {
        this.ciudadDestino = ciudadDestino;
    }

    public Ciudad getCiudadOrigen() {
        return ciudadOrigen;
    }

    public void setCiudadOrigen(Ciudad ciudadOrigen) {
        this.ciudadOrigen = ciudadOrigen;
    }

    public Moneda getMoneda() {
        return moneda;
    }

    public void setMoneda(Moneda moneda) {
        this.moneda = moneda;
    }

    public Usuario getUsuarioDestino() {
        return usuarioDestino;
    }

    public void setUsuarioDestino(Usuario usuarioDestino) {
        this.usuarioDestino = usuarioDestino;
    }

    public Usuario getUsuarioOrigen() {
        return usuarioOrigen;
    }

    public void setUsuarioOrigen(Usuario usuarioOrigen) {
        this.usuarioOrigen = usuarioOrigen;
    }

    public String getGiro() {
        return giro;
    }

    public void setGiro(String giro) {
        this.giro = giro;
    }
}
